package com.tankbattle.util;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

/**
 * 图片加载和管理工具类 (单例模式)
 */
public class ImageManager {
    private static final ImageManager instance = new ImageManager();
    private final Map<String, BufferedImage> images = new HashMap<>();
    private static final String BASE_PATH = "resources/images/";

    // 私有构造函数
    private ImageManager() {
        // 加载所有游戏图片
        loadAllImages();
    }

    private void loadAllImages() {
        // 检查基础路径是否存在
        URL checkUrl = getClass().getClassLoader().getResource(BASE_PATH);
        if (checkUrl == null) {
            System.err.println("错误：找不到图片资源目录：" + BASE_PATH);
            System.exit(1);
        }

        try {
            // 加载背景图片
            loadImage("background.jpg");

            // 加载坦克图片
            loadImage("tank_up.png");
            loadImage("tank_down.png");
            loadImage("tank_left.png");
            loadImage("tank_right.png");

            // 加载玩家坦克图片
            loadImage("player_tank_up.png");
            loadImage("player_tank_down.png");
            loadImage("player_tank_left.png");
            loadImage("player_tank_right.png");

            // 加载子弹图片
            loadImage("bullet_up.png");
            loadImage("bullet_down.png");
            loadImage("bullet_left.png");
            loadImage("bullet_right.png");

            // 加载爆炸效果图片
            loadImage("explosion_0.png");
            loadImage("explosion_1.png");
            loadImage("explosion_2.png");

            // 加载地图元素图片
            loadImage("wall.png");
            loadImage("steel_wall.png");
            loadImage("water.png");
            loadImage("grass.png");

            System.out.println("所有图片资源加载完成");
        } catch (Exception e) {
            System.err.println("加载图片资源时发生错误：" + e.getMessage());
            e.printStackTrace();
            System.exit(1);
        }
    }

    private void loadImage(String fileName) {
        try {
            URL imageUrl = getClass().getClassLoader().getResource(BASE_PATH + fileName);
            if (imageUrl == null) {
                throw new IOException("找不到图片文件: " + fileName);
            }
            BufferedImage image = ImageIO.read(imageUrl);
            images.put(fileName, image);
        } catch (IOException e) {
            System.err.println("加载图片失败: " + fileName);
            e.printStackTrace();
            System.exit(1);
        }
    }

    public static ImageManager getInstance() {
        return instance;
    }

    public BufferedImage getImage(String fileName) {
        return images.get(fileName);
    }
}
